<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>throttle</title>
</head>

<body>
    <button id="btn">click me</button>

    <script>
        /**
 * 节流函数 一个函数执行一次后，只有大于设定的执行周期才会执行第二次。有个需要频繁触发的函数，出于优化性能的角度，在规定时间内，只让函数触发的第一次生效，后面的不生效。
 * @param fn要被节流的函数
 * @param delay规定的时间
 */
        function throttle(fn, delay) {
            //记录上一次函数触发的时间
            var lastTime = 0;
            return function () {
                //记录当前函数触发的时间
                var nowTime = Date.now();
                if (nowTime - lastTime > delay) {
                    //修正this指向问题
                    fn.call(this);
                    //同步执行结束时间
                    lastTime = nowTime;
                }
            }
        }

        document.getElementById('btn').onclick = throttle(function () {
            console.log('按钮被点击了' + Date.now());
        }, 1000);


    </script>
</body>

</html>